package com.ys.service.sys;

import java.util.List;
import java.util.Map;

import com.bo.dto.NameValueDto;
import com.bo.dto.NameValueSelectDto;
import com.ys.entity.base.TbFileInfo;
import com.ys.service.purchase.impl.TcgOfflinePurchaseInStorageServiceImpl;
import com.ys.service.storage.impl.TccOfflineAssembleImpl;
import com.ys.service.sys.PdfService.ListingSubDto;
import com.ys.service.sys.YsColService.ToSettingFormDto.RowDto;

import com.ys.util.PdfUtil;
import lombok.AllArgsConstructor;
import lombok.Data;

public interface PdfService {
	
	/**
	 * 
	 * @param bid 单号
	 * @param title 标题，如：运营费用申请单
	 * @param companyVname 公司名称，如：福建省逸思电子商务有限公司
	 * @param timeYYYYMMDDHHmmss 申请时间，如：2024-06-26 13:58:23
	 * @param listData 头部数据数组，格式是name-value，如：[{name: "申请人", value: "00811"},{name: "申请人", value: "00811"}]
	 * @return
	 */
	String generatePDF(String bid, String title, String companyVname, String timeYYYYMMDDHHmmss, List<NameValueDto> listData);

	/**
	 * 服务发票
	 * @param companyAllNameCn 公司全称(中文)
	 * @param companyAllNameEn 公司全称(英文)
	 * @param toCompanyAllNameCn 转入公司全称(中文)
	 * @param invoiceNo 发票号码
	 * @param amountTotalCny 总金额
	 * @param invoiceDate 发票日期
	 * @param originCountry 原产地
	 * @param vgsbm 公司编码
	 * @param listData 产品数组
	 * @return
	 */
	String generatePDF_XSFP(String companyAllNameCn, String companyAllNameEn,
			String toCompanyAllNameCn,
			String invoiceNo,
			String amountTotalCny,
			String invoiceDate,
			String originCountry,
			String vgsbm,
			List<ProductDto> listData);
	@Data
	@AllArgsConstructor
	public static class ProductDto{
		private String productCode; // 商品编码
		private String description; // 品名描述
		private String qity; // 数量
		private String unit; // 单位
		private String unitPrice; // 单价(CNY)
		private String totalPrice; // 金额(CNY)
	}

	String generatePDF_FWFP(String companyAllNameCn, String companyAllNameEn,
			String toCompanyAllNameCn,
			String invoiceNo,
			String amountTotalCny,
			String invoiceDate,
			String originCountry,
			String vgsbm,
			List<SaleDto> listData);
	@Data
	@AllArgsConstructor
	public static class SaleDto{
		private String description; // 品名描述
		private String qity; // 数量
		private String unit; // 单位
		private String unitPrice; // 单价(CNY)
		private String totalPrice; // 金额(CNY)
	}

	String generateGoodsPDF_Listring(String productCode, String productName, String vgsbm, String vgsjc, List<ListingSubDto> listData);
	@Data
	@AllArgsConstructor
	public static class ListingSubDto{
		private String code; // 商品编码
		private String name; // 商品名称
	}

	/**
	 * 欧代标打印预览
	 */
	String europeanStandardPrint(String bid,List<EuropeanStandardPrintDto> europeanStandardPrintDtoList);

	/**
	 *自定义打印模版（财务使用）
	 * @param bid 单号
	 * @param title 标题，如：运营费用申请单
	 * @param companyVname 公司名称，如：福建省逸思电子商务有限公司
	 * @param timeYYYYMMDDHHmmss 申请时间，如：2024-06-26 13:58:23
	 * @param listData 头部数据数组，格式是name-value，如：[{name: "申请人", value: "00811"},{name: "申请人", value: "00811"}]
	 * @param  auditDataList 审核明细
	 * @param  printTime 打印时间
	 * @param  printUser 打印人
	 * @return printDep 处理结果
	 */
	String generateZLY(String bid, String title, String companyVname, String timeYYYYMMDDHHmmss, List<NameValueDto> listData,List<Map<String, Object>>  auditDataList,
					   String printTime,String printUser,String printDep
	);


	@Data
	@AllArgsConstructor
	public static class EuropeanStandardPrintDto{
		private String descriptionProduct; // 商品英文名称
		private String model; // 商品编码
		private String euAgent;
		private String euAgentAddress;
		private String manufacturer;
		private String manufactureraddress;
		private String ageRange;
		private String productionDate; //
		private Integer numPlanDeliver; // 数量
		private List<TbFileInfo> tbFileInfos; // 附件数量

	}
	String generateGoodsPDF_RKXB(List<TccOfflineAssembleImpl.StockInDto> stockInDtoList);


	String generateGoodsPDF_ZZQD(TccOfflineAssembleImpl.ZuzhuangDto zuzhuangDto);

	/**
	 * 打印箱标其他信息
	 * @return
	 */
	String getLabelsPDF(String getFbaNo,String vgsbm,String logsticsWay,String boxWeight,String boxNo);

	/**
	 * 打印物流订单api逻辑
	 */
	String getUrlFba(String spOrderBids,String packno);
}
